import math

# 给定的参数
total_pens = 112
mating_duration = 20       # 自然交配期(天)
pregnancy_duration = 149   # 孕期(天)
lactation_duration = 40    # 哺乳期(天)
fattening_duration = 210   # 育肥期(天)
rest_duration = 20         # 空怀休整期(天)
lambs_per_birth = 2        # 每胎产羔数

# 计算一个完整的繁殖周期
reproduction_cycle = mating_duration + pregnancy_duration + lactation_duration + rest_duration

def calculate_optimal_flock(total_pens):
    """计算最优的基础母羊和种公羊数量"""
    # 我们需要找到基础母羊数量，使得所有阶段的羊栏需求不超过112
    
    # 尝试不同的基础母羊数量
    for num_ewes in range(50, 1000):
        # 根据比例计算种公羊数量(1:50)
        num_rams = max(1, math.ceil(num_ewes / 50))
        
        # 计算各阶段的羊栏需求
        # 1. 交配期
        mating_groups = math.ceil(num_ewes / 14)
        mating_pens = mating_groups * 1  # 每组需要一个栏
        
        # 2. 孕期
        pregnancy_pens = math.ceil(num_ewes / 8)
        
        # 3. 哺乳期
        lactation_pens = math.ceil(num_ewes / 6)
        
        # 4. 空怀休整期
        rest_pens = math.ceil(num_ewes / 14)
        
        # 5. 种公羊非交配期
        ram_pens = math.ceil(num_rams / 4)
        
        # 6. 育肥期 - 这是最复杂的部分，需要计算重叠的育肥批次
        # 每只母羊每年生产 lambs_per_birth 只羔羊，育肥期210天
        # 每年可以进行的繁殖批次
        batches_per_year = 365 / (reproduction_cycle / num_ewes * 14)  # 简化估算
        
        total_lambs = num_ewes * lambs_per_birth * (365 / reproduction_cycle)
        fattening_batches = math.ceil(total_lambs * fattening_duration / 365 / 14)
        fattening_pens = fattening_batches * 1  # 每批需要一个栏
        
        # 总羊栏需求
        total_needed = max(mating_pens, pregnancy_pens, lactation_pens, rest_pens) + ram_pens + fattening_pens
        
        if total_needed <= total_pens:
            best_ewes = num_ewes
            best_rams = num_rams
            max_lambs = total_lambs
        else:
            break
    
    return best_ewes, best_rams, max_lambs

# 计算最优配置
optimal_ewes, optimal_rams, annual_lambs = calculate_optimal_flock(total_pens)

print(f"合理的种公羊数量: {optimal_rams}只")
print(f"合理的基础母羊数量: {optimal_ewes}只")
print(f"年化出栏羊只数量范围: {int(annual_lambs*0.9)}-{int(annual_lambs*1.1)}只")  # 考虑一定波动范围

# 计算要达到1500只年出栏的羊栏缺口
def calculate_pen_deficit(target_lambs):
    # 反向计算需要的母羊数量
    required_ewes = math.ceil(target_lambs / (lambs_per_birth * (365 / reproduction_cycle)))
    required_rams = max(1, math.ceil(required_ewes / 50))
    
    # 计算所需的羊栏数量
    # 简化为线性比例估算
    scale_factor = required_ewes / optimal_ewes
    required_pens = total_pens * scale_factor
    deficit = required_pens - total_pens
    
    return math.ceil(deficit)

deficit = calculate_pen_deficit(1500)
print(f"要达到年出栏1500只，现有羊栏缺口约为: {deficit}个")
